// 导入模块（路径、文件）
import Path from "path";
import fs from "fs";
// 导入写好的绝对路径模块
import { absAddress } from "../url/url.js";

// 创建函数（用来扫描 controllers 目录的 js 文件）
function scanController(conDir) {
  // 获取根目录路径（自动获取绝对路径）
  const path = absAddress(`../${conDir}`);

  // 如果路径存在就继续扫描当前路径的js文件
  if (fs.existsSync(path)) {
    // 获取目录文件（js）
    const files = fs.readdirSync(path).filter((file) => file.endsWith("js"));

    // 拼接完整路径
    const fullPath = files.map((file) => {
      return `file:///${Path.join(path, file)}`;
    });

    // 返回 js 文件路径
    return fullPath;
  }
  // 路径不存在返回 null
  return null;
}

// 创建函数（注册对应的请求路径和处理路由）
function registryRouter(router, controllersfullPath) {
  // 遍历控制文件
  controllersfullPath.forEach(async (controller) => {
    // 导入控制文件
    const controllerObj = (await import(controller)).obj;

    // 遍历配置路由（路径、方法、异步函数）
    for (const key in controllerObj) {
      // 获取 请求方法，请求路径
      const [requestMethod, requestPath] = key.split(" ");
      // 获取 请求函数
      const requestFn = controllerObj[key];

      // 验证请求方式
      if (requestMethod.endsWith("get")) {
        // 处理 get 请求路由
        router.get(requestPath, requestFn);
      } else if (requestMethod.endsWith("post")) {
        // 处理 post 请求路由
        router.post(requestPath, requestFn);
      } else if (requestMethod.endsWith("put")) {
        // 处理 put 请求路由
        router.put(requestPath, requestFn);
      } else if (requestMethod.endsWith("delete")) {
        // 处理 delete 请求路由
        router.delete(requestPath, requestFn);
      } else {
        // 请求方式不正确
        console.log(`${requestMethod}：请求方式不正确`);
      }
    }
  });
}

// 暴露函数（扫描控制器、处理路由）
export const scanControllers = scanController;
export const registryRouters = registryRouter;
